﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Etapa1.ComercioEspacial
{
    public partial class NaveForm : Form
    {
        Nave nave;
        List<Planeta> lista;
        public NaveForm(Nave nave, List<Planeta> lista)
        {
            this.lista = lista;
            this.nave = nave;
            InitializeComponent();
        }

        public void LoadALL()
        {

            dataGridView1.Columns.Clear();
            dataGridView2.Columns.Clear();
            dataGridView3.Columns.Clear();

            dataGridView1.Rows.Clear();
            dataGridView2.Rows.Clear();
            dataGridView3.Rows.Clear();

            Planeta p = nave.PlanetaNoLocal;
            if (p != null)
            {
                label7.Visible = true;
                planeta.Visible = true;
                planeta.Name = p.NomeSistema;
                Local.Text = planeta.Name;

                dataGridView1.Columns.Add("ProductName", "ProductName");
                dataGridView1.Columns.Add("Preco", "Preco");
                dataGridView1.Columns.Add("Quantidade", "Quantidade");

                foreach (var item in p.comercio.produtosDisponiveis)
                {
                    for (int i = 0; i < item.Value.Count; i++)
                    {
                        int n = dataGridView1.Rows.Add();
                        dataGridView1.Rows[n].Cells["ProductName"].Value = item.Key;
                        dataGridView1.Rows[n].Cells["Preco"].Value = item.Value[i].preco;
                        dataGridView1.Rows[n].Cells["Quantidade"].Value = item.Value[i].quantidade;
                    }

                }

                //////--

                dataGridView2.Columns.Add("ProductName", "ProductName");
                dataGridView2.Columns.Add("Preco", "Preco");
                dataGridView2.Columns.Add("Quantidade", "Quantidade");

                foreach (var item in p.comercio.produtosNecessidades)
                {
                    for (int i = 0; i < item.Value.Count; i++)
                    {
                        int n = dataGridView2.Rows.Add();
                        dataGridView2.Rows[n].Cells["ProductName"].Value = item.Key;
                        dataGridView2.Rows[n].Cells["Preco"].Value = item.Value[i].preco;
                        dataGridView2.Rows[n].Cells["Quantidade"].Value = item.Value[i].quantidade;
                    }
                }

            }
            else
            {
                label7.Visible = false;
                Local.Text = "Viajando";
                planeta.Visible = false;
                dataGridView1.Visible = false;
                dataGridView2.Visible = false;
                Source.Visible = true;
                Destiny.Visible = true;

                Source.Text = "Saindo de " + nave.rotaAtiva.destino.NomeSistema;
                Destiny.Text = "Indo para " + nave.rotaAtiva.source.NomeSistema;
            }

            Nome.Text = nave.Nome;

            textBox1.Text = Convert.ToString(nave.dono.dinheiro);
            dataGridView3.Columns.Add("ProductName", "ProductName");
            dataGridView3.Columns.Add("Quantidade", "Quantidade");

            int estoque = 0;
            foreach (var item in nave.estoqueNow)
            {
                estoque += item.quantidade;
                int n = dataGridView3.Rows.Add();
                dataGridView3.Rows[n].Cells["ProductName"].Value = item.nome;
                dataGridView3.Rows[n].Cells["Quantidade"].Value = item.quantidade;
            }

            cargaatual.Text = Convert.ToString(estoque);
            lotacao.Text = Convert.ToString(nave.estoque);
            Dono.Text = nave.dono.Nome;

        }

        private void NaveForm_Load(object sender, EventArgs e)
        {
            LoadALL();
        }

        private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            int index = e.RowIndex;
            String productName = dataGridView1.Rows[index].Cells["ProductName"].Value as string;
            float preco = Convert.ToSingle(dataGridView1.Rows[index].Cells["Preco"].Value) ;
            int quantidade = Convert.ToInt32(dataGridView1.Rows[index].Cells["Quantidade"].Value );

            CompraVenda cv = new CompraVenda(productName, preco, quantidade, false);
            cv.ShowDialog();

            int res = nave.PlanetaNoLocal.comercio.BuyProduto(nave.dono, productName, cv.Quantidade);
            if (res == 0)
                return;
            Produto p = new Produto();
            p.nome = productName;
            p.owner = nave.dono.Nome;
            p.quantidade = cv.Quantidade;
            nave.estoqueNow.Add(p);

            MessageBox.Show("Foram Compradas " + res + " unidades de " + productName);

            LoadALL();

        }

        private void dataGridView2_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            int index = e.RowIndex;
            String productName = dataGridView2.Rows[index].Cells["ProductName"].Value as string;
            Produto pSell =  nave.estoqueNow.Find((a)  => a.nome == productName);
            if (pSell != null)
            {
                float preco = Convert.ToSingle(dataGridView2.Rows[index].Cells["Preco"].Value);
                int quantidade = Convert.ToInt32(dataGridView2.Rows[index].Cells["Quantidade"].Value);

                CompraVenda cv = new CompraVenda(productName, preco, pSell.quantidade, true);
                cv.ShowDialog();

                int res = nave.PlanetaNoLocal.comercio.SellProduto(nave.dono, productName, cv.Quantidade);
                if (res == 0)
                    return;
                                
                nave.estoqueNow.Remove(pSell);

                MessageBox.Show("Foram Vendidas " + res + " unidades de " + productName);

                LoadALL();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            TravelOptions t = new TravelOptions(lista,nave.PlanetaNoLocal);
            t.ShowDialog();
            string dest = t.destino;
            nave.GoTo(dest);
            this.Close();
        }
        
    }
}
